package com.study.it.util;

import org.hibernate.Hibernate;

import java.lang.reflect.Method;

public class LoadUtil {
    public static void init(Object o)
    {
        if(o==null)
            return;
        if(o instanceof Iterable)//Iterable是可以循环的东西
        {
            Iterable list=(Iterable)o;//如果是集合我们一个个去初始化
            for(Object obj:list)
            {
                initObject(obj);
            }
        }
        else
           initObject(o);//单个对象
    }
    public static void initObject(Object o)
    {
        if(o==null)
            return;
        try {
            //判断o是否有延迟加载字段，如果有，就强迫加载它
            Class c = o.getClass();//获取元数据
            Method[] methods = c.getMethods();
            for (Method m : methods) {
                if (!m.getName().startsWith("get"))
                    continue;
                Object rval = m.invoke(o);
                if (!Hibernate.isInitialized(rval))//如果没有初始化
                    Hibernate.initialize(rval);//就强迫加载数据

            }
        }catch(Exception ex)
        {
            ex.printStackTrace();
            throw new RuntimeException(ex);
        }
    }
}
